const express = require('express');
const router = express.Router();
const multer = require('multer');
const fs = require('fs');
const path = require('path');

// 配置multer用于文件上传
const upload = multer({
  limits: {
    fileSize: 50 * 1024 * 1024, // 50MB
  },
  fileFilter: (req, file, cb) => {
    // 验证文件类型
    const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
    if (!allowedTypes.includes(file.mimetype)) {
      return cb(new Error('只支持常见的图像格式: JPG, JPEG, PNG, GIF, WebP'), false);
    }
    cb(null, true);
  }
});

// 导入服务
const { analyzeImageWithAliyun } = require('../services/aliyunService');

/**
 * @api {post} /analyze 图像分析接口
 * @apiName AnalyzeImage
 * @apiGroup Image
 * 
 * @apiParam {File} image 要分析的图像文件 (multipart/form-data)
 * @apiParam {String} prompt 提示文本 (可选)
 * @apiParam {String} systemPrompt 系统提示 (可选)
 * 
 * @apiSuccess {Object} data 分析结果
 * @apiSuccess {String} data.result AI分析结果文本
 * @apiSuccess {Object} data.rawResponse 原始响应数据
 * @apiSuccessExample {json}
 *    Success-Response:
 *    {
 *      "ok": true,
 *      "data": {
 *        "result": "图像中包含...",
 *        "rawResponse": { ... }
 *      },
 *      "message": "分析成功"
 *    }
 */
router.post('/analyze', upload.single('image'), async (req, res, next) => {
  try {
    // 验证请求
    if (!req.file) {
      return res.status(400).json({
        ok: false,
        error: {
          message: '请上传图像文件',
          code: 'MISSING_IMAGE'
        }
      });
    }

    // 解析请求参数，固定使用qwen-vl-max模型
    const { prompt = '请详细描述这张图片中的内容，包括可见的物体、人物、场景和任何值得注意的细节。', 
      systemPrompt = '你是一个专业的图像分析助手，能够详细描述图像内容并提供深入分析。' } = req.body;
    const model = 'qwen-vl-max'; // 固定使用qwen-vl-max模型

    console.log(`开始分析图像: ${req.file.originalname}, 模型: ${model}`);

    // 读取文件内容并转换为base64
    const buffer = req.file.buffer;
    const base64Image = buffer.toString('base64');
    const mimeType = req.file.mimetype;

    // 调用阿里云服务进行图像分析
    const result = await analyzeImageWithAliyun({
      base64Image,
      mimeType,
      model,
      prompt,
      systemPrompt
    });

    console.log('图像分析完成');

    // 返回结果
    res.status(200).json({
      ok: true,
      data: result,
      message: '分析成功'
    });
  } catch (error) {
    console.error('图像分析失败:', error.message);
    next({
      status: 500,
      message: error.message || '图像分析失败',
      code: error.code || 'ANALYSIS_ERROR'
    });
  }
});

module.exports = router;